package edu.mama.college.mapper;

import edu.mama.college.model.Page;
import edu.mama.college.model.User;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 用户类的MyBatis操作接口
 */
@Mapper
@Repository(value ="userMapper")
public interface UserMapper {

    /**
     * 用户登录（根据手机号和密码进行匹配）
     * @param mobile
     * @param password
     * @return
     */
    @Select("SELECT * FROM user WHERE mobile = #{mobile} and password = #{password}")
    User findByMobileAndPassword(@Param("mobile") String mobile,
                                 @Param("password") String password);

    /**
     * 根据手机号查找用户是否存在（注册前的判断）
     * @param mobile
     * @return
     */
    @Select("SELECT * FROM user WHERE mobile = #{mobile}")
    User findByMobile(@Param("mobile") String mobile);

    /**
     * 用户注册
     * @param user
     */
    //  Options注解可以在插入后获取新增的主键值
    // 设置@Options属性userGeneratedKeys的值为true，并指定实例对象中主键的属性名keyProperty以及在数据库中的字段名keyColumn。
    // 这样在User插入数据后，id属性会被自动赋值。
    @Select("INSERT INTO user (mobile, password) VALUES (#{mobile}, #{password})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    void register(User user);

    /**
     * 更新登录时间
     */
    @Select("UPDATE user set last_login_time = #{lastLoginTime} where id = #{id}")
    void updateLastLoginTime(User user);

    /**
     * 修改昵称
     */
    @Select("UPDATE user set nickname = #{nickname} where id = #{id}")
    int updateNickname(User user);

    /**
     * 修改密码
     */
    @Select("UPDATE user set password = #{password} where id = #{id}")
    void updatePassword(User user);

    /**
     * 修改头像
     */
    @Select("UPDATE user set avatar = #{avatar} where id = #{id}")
    void updateAvatar(User user);


    List<User> userList(int page, int size, String mobile, String begin, String end);

    int countTotal(String mobile, String begin, String end);

    @Select("UPDATE user set mobile = #{mobile} where id = #{userId}")
    int changeMobile(int userId,String mobile);

}
